home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / cc68k.arc / LIB.SA < prev    next >
Text File  |  1989-09-27  |  1KB  |  62 lines

  1.      SECTION 9
  2. *
  3. *    _C_LMUL    LONG SIGNED MULTIPLY
  4. *
  5. *    MULTIPLIES TWO LONG OPERANDS ON THE STACK AND RETURNS THE
  6. *    RESULT ON THE STACK WITH NO GARBAGE.
  7. *
  8.     XDEF    _C_LMUL
  9. _C_LMUL:
  10.     MOVEM.L    D0-D3,-(A7)        *SAVE REGISTERS
  11.     MOVE.L    20(A7),D0        *GET PARAMETER 1
  12.     MOVE.W    D0,D2
  13.     MOVE.W    D0,D1
  14.     EXT.L    D1
  15.     SWAP    D1
  16.     SWAP    D0
  17.     SUB.W    D0,D1
  18.     MOVE.W    26(A7),D0        *GET MSW OF PARAMETER 2
  19.     MOVE.W    D0,D3
  20.     EXT.L    D3
  21.     SWAP    D3
  22.     SUB.L    24(A7),D3        *SUBTRACT LSW OF PARAMETER 2
  23.     MULS    D0,D1
  24.     MULS    D2,D3
  25.     ADD.W    D1,D3
  26.     MULS    D2,D0
  27.     SWAP    D0
  28.     SUB.W    D3,D0
  29.     SWAP    D0
  30.     MOVE.L    D0,24(A7)
  31.     MOVE.L    16(A7),20(A7)        *MOVEE RETURN ADDRESS
  32.     MOVEM.L    (A7)+,D0-D3        *RESTORE REGISTERS
  33.     ADD.W    #4,A7            *ADJUST STACK
  34.     RTS
  35. *
  36. *    _C_SWITCH - EXECUTE C SWITCH STATEMENT
  37. *
  38. *    THE SWITCH TABLE IS ENCODED AS FOLLOWS:
  39. *
  40. *        LONG    LABEL1,CASE1
  41. *        LONG    LABEL2,CASE2
  42. *        LONG    LABEL3,CASE3
  43. *        ... FOR ALL CASES
  44. *        LONG    0,DEFAULTCASE
  45. *
  46. *    THE CASE VARIABLE IS PASSED IN D0
  47. *
  48.     XDEF    _C_SWITCH
  49. _C_SWITCH:
  50.     MOVE.L    (A7)+,A0        *GET TABLE ADDRESS
  51. _C_SW1:
  52.     MOVE.L    (A0)+,A1        *GET A LABEL
  53.     MOVE.L    A1,D1            *TEST IT FOR DEFAULT
  54.     BEQ.S    _C_SW2            *JUMP IF DEFAULT CASE
  55.     CMP.L    (A0)+,D0        *SEE IF THIS CASE
  56.     BNE    _C_SW1            *NEXT CASE IF NOT
  57.     JMP    (A1)            *JUMP TO CASE
  58. _C_SW2:
  59.         MOVE.L  (A0),A0 *GET DEFAULT ADDRESS.
  60.         JMP     (A0)    *JUMP TO DEFAULT CASE.
  61.         END
  62.